package pattern.factory.simplefactory;

import java.util.Arrays;

/**
 * 彩票随机生成器
 *
 * @author zhang peng yang ming
 * @create 2018-07-21 22:07
 */
public class Lottery {
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            int[] lottery = getLottery();
            Arrays.sort(lottery);

            for (int e : lottery) {
                System.out.printf("%-4d", e);
            }
            System.out.println();
        }
    }

    /**
     * 生成随机数 指定范围的随机
     */
    public static int getElement(int max) {
        return (int)(Math.random() * max) + 1;
    }

    /**
     * 获取彩票红色区域的球号
     * 1. 创建临时数组，用于存储随机生成的彩票的数字
     * 2. 生产成随机数
     * 3. 将随机数存入数组中，
     * 3.1 如果生成的随机数在数组中已经存在，则不放入，继续下一次随机
     * 3.2 直到数组6个元素装满
     * @return
     */
    public static int[] getLottery() {
        int[] lottery = new int[6];  // 临时数组

        for (int i = 0; i < 6; i++) {  // 每位数都随机生成一次
            boolean exist = true; // 没生成数据之前假设数据已经存在并重复，因此需要进入while里面进行随机数生成
            while (exist) {
                int tmp = getElement(29);  // 获取随机数

                exist = false;  // 生成后，假设不重复，因此需要到for 循环中判断到底是否重复
                for (int j = 0; j < i; j++) {
                    if (tmp == lottery[j]) {
                        exist = true;  // 确实有相等
                        break;
                    }
                }
                // 如果不重复则将数据放到数组中，并跳出当前循环
                if (!exist) {
                    lottery[i] = tmp;
                    exist = false;
                }
            }
        }

        return lottery;
    }
}
